﻿using System;
using System.ComponentModel;

namespace RobotGerchik.DataClass.BaseTransaqCalss
{
    /// <summary>
    /// Клиентские счета
    /// </summary>
    public class ClientAccount : INotifyPropertyChanged
    {
        #region Private

        private string _id;
        private string _type;
        private string _currency;
        private double _mlInterday;
        private double _mlOverNight;
        private double _mlRestrict;
        private double _mlCall;
        private double _mlClose;

        #endregion

        #region Public
        /// <summary>
        /// CLIENT_ID
        /// </summary>
        public string ID
        {
            get { return _id; }
            set
            {
                if (_id != value)
                {
                    _id = value;
                    RaisePropertyChanged("ID");
                }
            }
        }

        /// <summary>
        /// тип клиента
        /// Возможные типы клиента: spot (кассовый), leverage (плечевой), margin_level (маржинальный).
        /// </summary>
        public string Type
        {
            get { return _type; }
            set
            {
                if (_type != value)
                {
                    _type = value;
                    RaisePropertyChanged("Type");
                }
            }
        }

        /// <summary>
        /// Валюта
        /// Валюта фондового портфеля currency может принимать следующие
        /// значения: NA (если клиент не имеет фондового портфеля), RUB, EUR, USD.
        /// </summary>
        public string Currency
        {
            get { return _currency; }
            set
            {
                if (_currency != value)
                {
                    _currency = value;
                    RaisePropertyChanged("Currency");
                }
            }
        }

        /// <summary>
        /// дневной кредит
        /// присылаются только для плечевых клиентов.
        /// Выражаются в виде десятичной дроби и показывают величину плеча.
        /// </summary>
        public double MlInterday
        {
            get { return _mlInterday; }
            set
            {
                if (_mlInterday != value)
                {
                    _mlInterday = value;
                    RaisePropertyChanged("MlInterday");
                }
            }
        }

        /// <summary>
        /// овернайт кредит
        /// присылаются только для плечевых клиентов.
        /// Выражаются в виде десятичной дроби и показывают величину плеча.
        /// </summary>
        public double MlOverNight
        {
            get { return _mlOverNight; }
            set
            {
                if (_mlOverNight != value)
                {
                    _mlOverNight = value;
                    RaisePropertyChanged("MlOverNight");
                }
            }
        }

        /// <summary>
        /// у.м. ограничительный
        /// присылаются только для маржинальных клиентов
        /// </summary>
        public double MlRestrict
        {
            get { return _mlRestrict; }
            set
            {
                if (_mlRestrict != value)
                {
                    _mlRestrict = value;
                    RaisePropertyChanged("MlRestrict");
                }
            }
        }

        /// <summary>
        /// у.м. требования
        /// присылаются только для маржинальных клиентов
        /// </summary>
        public double MlCall
        {
            get { return _mlCall; }
            set
            {
                if (_mlCall != value)
                {
                    _mlCall = value;
                    RaisePropertyChanged("MlCall");
                }
            }
        }


        /// <summary>
        /// у.м. закрытия
        /// присылаются только для маржинальных клиентов
        /// </summary>
        public double MlClose
        {
            get { return _mlClose; }
            set
            {
                if (_mlClose != value)
                {
                    _mlClose = value;
                    RaisePropertyChanged("MlClose");
                }
            }
        }

        #endregion

        #region event PropertyChangedEventHandler

        public event PropertyChangedEventHandler PropertyChanged;

        protected void RaisePropertyChanged(string propertyName)
        {
            var handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        #endregion
    }
}
